//package com.light.netty.client.init;
//
//import com.light.netty.client.handler.HttpBusinessClientHandler;
//import io.netty.bootstrap.Bootstrap;
//import io.netty.channel.*;
//import io.netty.channel.nio.NioEventLoopGroup;
//import io.netty.channel.socket.SocketChannel;
//import io.netty.channel.socket.nio.NioSocketChannel;
//import io.netty.handler.codec.http.HttpClientCodec;
//import io.netty.handler.codec.http.HttpObjectAggregator;
//import io.netty.handler.codec.string.StringDecoder;
//import io.netty.handler.codec.string.StringEncoder;
//import io.netty.handler.logging.LogLevel;
//import io.netty.handler.logging.LoggingHandler;
//import io.netty.handler.timeout.IdleStateHandler;
//import org.springframework.stereotype.Component;
//
//import javax.annotation.PostConstruct;
//
///**
// * @author fuhui
// * @Description：
// * @data 2025/3/13 11:10
// */
//@Component
//public class HttpNettyClientInit {
//
//    private static final String HOST = "127.0.0.1";
//    private static final int PORT = 8081;
//
//    @PostConstruct
//    public void init() throws Exception {
//        System.out.println("初始化HTTP客户端...........");
//        new Thread(() -> {
//            // 1. 初始化线程组
//            EventLoopGroup group = new NioEventLoopGroup();
//
//            try {
//                // 3. 配置 Bootstrap
//                Bootstrap b = new Bootstrap();
//                b.group(group)
//                        .channel(NioSocketChannel.class) // 使用 NIO 模式-TCP
//    //                    .channel(NioDatagramChannel.class) // 使用 NIO 模式-UDP
//                        .handler(new ChannelInitializer<SocketChannel>() {
//                            @Override
//                            protected void initChannel(SocketChannel ch) throws Exception {
//                                ChannelPipeline pipeline = ch.pipeline();
//
//                                // 3.2 心跳检测（30 秒无活动自动断开）
//    //                            pipeline.addLast(new IdleStateHandler(30, 0, 0));
//
//                                // 3.4 日志记录
//                                pipeline.addLast(new LoggingHandler(LogLevel.INFO));
//
//                                pipeline.addLast(new HttpClientCodec());
//                                pipeline.addLast(new HttpObjectAggregator(81920));
//                                // 3.5 业务处理器
//                                pipeline.addLast(new HttpBusinessClientHandler("HTTP-1"));
//                            }
//                        });
//
//                // 4. 连接服务器
//                ChannelFuture f = b.connect(HOST, PORT).sync();
//                System.out.println("Netty HTTP client connected to server: " + HOST + ":" + PORT);
//
//                // 5. 等待连接关闭
//                f.channel().closeFuture().sync();
//
//            } catch (InterruptedException e) {
//                throw new RuntimeException(e);
//            } finally {
//                // 6. 释放资源
//                group.shutdownGracefully();
//            }
//        }).start();
//
//
//        new Thread(() -> {
//            // 1. 初始化线程组
//            EventLoopGroup group = new NioEventLoopGroup();
//
//            try {
//                // 3. 配置 Bootstrap
//                Bootstrap b = new Bootstrap();
//                b.group(group)
//                        .channel(NioSocketChannel.class) // 使用 NIO 模式-TCP
//    //                    .channel(NioDatagramChannel.class) // 使用 NIO 模式-UDP
//                        .handler(new ChannelInitializer<SocketChannel>() {
//                            @Override
//                            protected void initChannel(SocketChannel ch) throws Exception {
//                                ChannelPipeline pipeline = ch.pipeline();
//
//                                // 3.2 心跳检测（30 秒无活动自动断开）
//                                pipeline.addLast(new IdleStateHandler(30, 0, 0));
//
//                                // 3.4 日志记录
//                                pipeline.addLast(new LoggingHandler(LogLevel.INFO));
//
//                                pipeline.addLast(new HttpClientCodec());
//                                pipeline.addLast(new HttpObjectAggregator(81920));
//                                // 3.5 业务处理器
//                                pipeline.addLast(new HttpBusinessClientHandler("HTTP-2"));
//                            }
//                        });
//
//                // 4. 连接服务器
//                ChannelFuture f = b.connect(HOST, PORT).sync();
//                System.out.println("Netty HTTP client connected to server: " + HOST + ":" + PORT);
//
//                // 5. 等待连接关闭
//                f.channel().closeFuture().sync();
//
//            } catch (InterruptedException e) {
//                throw new RuntimeException(e);
//            } finally {
//                // 6. 释放资源
//                group.shutdownGracefully();
//            }
//        }).start();
//    }
//
//    /**
//     * 创建 SSL 上下文
//     */
////    private static SslContext createSslContext() throws Exception {
////        // 加载密钥库
////        KeyStore ks = KeyStore.getInstance("JKS");
////        try (FileInputStream fis = new FileInputStream("client.keystore")) {
////            ks.load(fis, "password".toCharArray()); // 密钥库密码
////        }
////
////        // 初始化密钥管理器
////        KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
////        kmf.init(ks, "password".toCharArray()); // 密钥库密码
////
////        // 初始化信任管理器
////        TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
////        tmf.init(ks); // 使用相同的密钥库作为信任库
////
////        // 创建 SSL 上下文
////        return SslContextBuilder.forClient()
////                .keyManager(kmf.getKeyManagers())
////                .trustManager(tmf.getTrustManagers())
////                .build();
////    }
//}